#include<iostream>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<cstdio>
#include<cstring>
void ChildWirte(int wfd)
{
    char buffer[1024];
    int cnt = 0;
    while(true)
    {
        snprintf(buffer,sizeof(buffer),"I am child! pid: %d,cnt: %d",getpid(),cnt++);
        write(wfd,buffer,strlen(buffer));
        sleep(1);
    }
}

void FatherRead(int rfd)
{
    char buffer[1024];

    while(true)
    {
        buffer[0]=0;
        ssize_t n = read(rfd,buffer,sizeof(buffer)-1);
        if(n>0)
        {
            buffer[n]=0;
            std::cout<<"child say:"<<buffer<<std::endl;
        }
    }
}

int main()
{
    //创建管道
    int fds[2] = {0};
    int n = pipe(fds);

    if(n<0)
    {
        std::cerr << "pipe error"<<std::endl;
        return 1;
    }
    std::cout<<"fds[0]"<<fds[0]<<std::endl;
    std::cout<<"fds[1]"<<fds[1]<<std::endl;

    pid_t pid = fork();

    if(pid==0)
    {
        //child
        close(fds[0]);
        ChildWirte(fds[1]);

        close(fds[1]);
        exit(0);
    }
    close(fds[1]);
    FatherRead(fds[0]);

    waitpid(pid,nullptr,0);
    return 0;
}